/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import util.ControlaConexao;
import modelo.AreaTecnica;

/**
 *
 * @author Gilmara Maquine
 */
public class AreaTecnicaDAO {
    private Connection conexao;
    private PreparedStatement instrucao;
    private ResultSet resultado;

    private void fechaInstrucao() {
        try {
            this.instrucao.close();
        } catch (Exception e) {
            System.out.println("Erro ao fechar instrucao!" + e.getMessage());
        }
    }

    private void fechaConexao() {
        try {
            this.conexao.close();
        } catch (Exception e) {
            System.out.println("Erro ao fechar conexao!" + e.getMessage());
        }
    }

    private void fechaResultado() {
        try {
            this.resultado.close();
        } catch (Exception e) {
            System.out.println("Erro ao fechar o resultado!" + e.getMessage());
        }
    }
    
    public void inserir(AreaTecnica area){
        try{
            this.conexao = ControlaConexao.getConexao();
            String sql = "CALL INSERIR_AREA (?)";
            this.instrucao = conexao.prepareStatement(sql);
            this.instrucao.setString(1,area.getDescricao());
            instrucao.execute();
            System.out.println("Conectado com sucesso!");
        }catch(SQLException e){
            throw new RuntimeException(e);
        }finally{
            fechaInstrucao();
            fechaConexao();
        }
    }
    
    public void alterar(AreaTecnica area){
        try{
            this.conexao = ControlaConexao.getConexao();
            String sql = "CALL ALTERAR_AREA (?,?)";
            this.instrucao = conexao.prepareStatement(sql);
            this.instrucao.setString(1,area.getDescricao());
            this.instrucao.setLong(2,area.getId());
            instrucao.execute();
            System.out.println("Conectado com sucesso");
        }catch(SQLException e){
            System.out.println("Erro: "+e.getMessage());
        }finally{
            fechaInstrucao();
            fechaConexao();
        }
        
    }

    public void excluir(AreaTecnica area){
        try{
            this.conexao = new ControlaConexao().getConexao();
            String sql = "CALL EXCLUIR_AREA(?)";
            this.instrucao = conexao.prepareStatement(sql);
            this.instrucao.setLong(1,area.getId());
            instrucao.execute();
            System.out.println("Conectado com sucesso!");
        }catch(SQLException e){
            System.out.println("Erro: "+e.getMessage());
        }finally{
            fechaInstrucao();
            fechaConexao();
        }
    }
    public AreaTecnica consultar(AreaTecnica area){
        AreaTecnica areaEncontrada = null;
        try{
            this.conexao = new ControlaConexao().getConexao();
            System.out.println("CONECTADO!");
            String sql = "CALL CONSULTAR_AREA(?)";
            this.instrucao = conexao.prepareStatement(sql);
            instrucao.setLong(1,area.getId());
            resultado = instrucao.executeQuery();
                while (resultado.next()) {
                    areaEncontrada = new AreaTecnica();
                    areaEncontrada.setId(Long.parseLong(resultado.getString("are_id")));
                    areaEncontrada.setDescricao(resultado.getString("are_descricao"));
                   

                }
        }   
            catch(SQLException e){
                System.out.println("Erro: "+e.getMessage());
            }finally{
                fechaResultado();
                fechaInstrucao();
                fechaConexao();
            }
       return areaEncontrada;
        }
    
    public List<AreaTecnica> pesquisar(AreaTecnica area){
        AreaTecnica areaEncontrada = null;
        List<AreaTecnica> listaareas = new ArrayList<AreaTecnica>();
        try {
            this.conexao = new ControlaConexao().getConexao();
            System.out.println("Conectado!");
            String sql = "CALL PESQUISAR_AREA(?)";
            this.instrucao = conexao.prepareStatement(sql);
            instrucao.setString(1, "%" + area.getDescricao() + "%");
            resultado = instrucao.executeQuery();
            
            while (resultado.next()) {
                areaEncontrada = new AreaTecnica();
                areaEncontrada.setId(Long.parseLong(resultado.getString("are_id")));
                areaEncontrada.setDescricao(resultado.getString("are_descricao"));
                
                listaareas.add(areaEncontrada);

            }
          }catch(SQLException e){
                System.out.println("Erro: "+e.getMessage());
            }finally{
                fechaResultado();
                fechaInstrucao();
                fechaConexao();
        }
        return listaareas;
    }
    
    }
